package flowprocess

//可追踪的task
type TraceableTask interface {
	//获取TaskId，便于追踪
	TaskId() string
	//底层的Task
	Inner() Task
}

type traceableTask struct {
	taskId string
	task   Task
}

func (t traceableTask) TaskId() string {
	return t.taskId
}
func (t traceableTask) Inner() Task {
	return t.task
}

//将Task转为TraceableTask
func ToTraceableTask(taskId string, task Task) TraceableTask {
	t := traceableTask{taskId: taskId, task: task}
	return t
}

type TaskHandler interface {
	//处理完inTask时，如果需要产生新的任务，需要调用dispatch分发新任务。
	//如果返回的err不为nil，则会中断流处理。
	Handle(inTask Task, dispatch func(outTask Task)) (err error)

	//当任务处理完毕时，回调该方法。如果返回的err不为nil，则会中断流处理。
	OnCompleted(dispatch func(outTask Task)) (err error)
}

type TaskHandlerAdapter struct {
}

func(h TaskHandlerAdapter) OnCompleted(dispatch func(outTask Task)) (err error) {
	return nil
}